add support for UrlLink types.
authortsteven4 <tsteven4@gmail.com>
Wed, 26 Mar 2014 02:41:42 +0000 (02:41 +0000)
committertsteven4 <tsteven4@gmail.com>
Wed, 26 Mar 2014 02:41:42 +0000 (02:41 +0000)
gpsbabel/defs.h
gpsbabel/gpx.cc
gpsbabel/reference/multiple-links-2.gpx
gpsbabel/reference/multiple-links-2~gpx.gpx
gpsbabel/waypt.cc

index 7a3510c880f2d2b5785212943335ba8b4b475eed..f9885226b53a0e7aa9313dc1ff317bb11d4645d8 100644 (file)
@@ -360,8 +360,14 @@ public:
     url_(url),
     url_link_text_(url_link_text)
   { }
+  UrlLink(const QString url, const QString url_link_text, const QString url_link_type) :
+    url_(url),
+    url_link_text_(url_link_text),
+    url_link_type_(url_link_type)
+  { }
   QString url_;
   QString url_link_text_;
+  QString url_link_type_;
 };
 
 
@@ -654,6 +660,9 @@ unsigned int waypt_count(void);
 void set_waypt_count(unsigned int nc);
 void waypt_add_url(Waypoint* wpt, const QString& link,
                    const QString& url_link_text);
+void waypt_add_url(Waypoint* wpt, const QString& link,
+                   const QString& url_link_text,
+                   const QString& url_link_type);
 void xcsv_setup_internal_style(const char* style_buf);
 void xcsv_read_internal_style(const char* style_buf);
 Waypoint* find_waypt_by_name(const QString& name);
index f6dbad0d9fd6eb581538a0eb477c5caa7b705f99..472accbc0d74771eb14f869cfb74cf14508ca56c 100644 (file)
@@ -57,6 +57,7 @@ static gpsbabel::XmlStreamWriter* writer;
 static short_handle mkshort_handle;
 static QString link_url;
 static QString link_text;
+static QString link_type;
 
 
 static char* snlen = NULL;
@@ -105,6 +106,7 @@ typedef enum  {
   tt_wpttype_urlname,  /* Not in GPX 1.1 */
   tt_wpttype_link,             /* New in GPX 1.1 */
   tt_wpttype_link_text,        /* New in GPX 1.1 */
+  tt_wpttype_link_type,        /* New in GPX 1.1 */
   tt_wpttype_sym,
   tt_wpttype_type,
   tt_wpttype_fix,
@@ -386,6 +388,7 @@ tag_mapping tag_path_map[] = {
   GPXWPTTYPETAG(tt_wpttype_urlname, 0, "urlname"),             /* GPX 1.0 */
   GPXWPTTYPETAG(tt_wpttype_link, 0, "link"),                   /* GPX 1.1 */
   GPXWPTTYPETAG(tt_wpttype_link_text, 0, "link/text"), /* GPX 1.1 */
+  GPXWPTTYPETAG(tt_wpttype_link_type, 0, "link/type"), /* GPX 1.1 */
   GPXWPTTYPETAG(tt_wpttype_sym, 0, "sym"),
   GPXWPTTYPETAG(tt_wpttype_type, 1, "type"),
   GPXWPTTYPETAG(tt_wpttype_fix, 0, "fix"),
@@ -1109,13 +1112,17 @@ gpx_end(const QString& el)
     link_->url_link_text_ = cdatastr;
     break;
   case tt_wpttype_link:
-    waypt_add_url(wpt_tmp, link_url, link_text);
+    waypt_add_url(wpt_tmp, link_url, link_text, link_type);
+    link_type = QString();
     link_text = QString();
     link_url = QString();
     break;
   case tt_wpttype_link_text:
       link_text = cdatastr.trimmed();
     break;
+  case tt_wpttype_link_type:
+      link_type = cdatastr.trimmed();
+    break;
   case tt_unknown:
     end_something_else();
     return;
@@ -1353,6 +1360,7 @@ write_gpx_url(const Waypoint* waypointp)
       writer->writeStartElement("link");
       writer->writeAttribute("href", l.url_);
       writer->writeOptionalTextElement("text", l.url_link_text_);
+      writer->writeOptionalTextElement("type", l.url_link_type_);
       writer->writeEndElement();
     }
     return;
index 4162e12332b9e52df6b0bb63bf8d6c9f81a2a58e..b733fb110370bf6169654c5765d32d8ef2ceecf0 100644 (file)
@@ -12,7 +12,7 @@
     <link href="www.zero.com"/>
     <link href="www.one.com">
       <text>one</text>
-      <type> not me </type>
+      <type>text/html</type>
     </link>
     <link href="www.two.com">
       <text>  two dots  </text>
index f5b2bab4c2ac18ab3260e21f75ce5d3dc382cb0e..07c0f1b72d3caa0a8d1813281d41178f52e6c0e9 100644 (file)
@@ -12,6 +12,7 @@
     <link href="www.zero.com"/>
     <link href="www.one.com">
       <text>one</text>
+      <type>text/html</type>
     </link>
     <link href="www.two.com">
       <text>two dots</text>
index c84ebb37d9ecb60a9bfb02f83f1b9a800883ea06..876c5abb286bfe31ae8e2a2da8c6769c620a838c 100644 (file)
@@ -417,6 +417,12 @@ waypt_add_url(Waypoint* wpt, const QString& link, const QString& url_link_text)
   wpt->url_link_list_.push_back(UrlLink(link, url_link_text));
 }
 
+void
+waypt_add_url(Waypoint* wpt, const QString& link, const QString& url_link_text, const QString& url_link_type)
+{
+  wpt->url_link_list_.push_back(UrlLink(link, url_link_text, url_link_type));
+}
+
 double
 gcgeodist(const double lat1, const double lon1,
           const double lat2, const double lon2)